#ifndef CABILITY_H
#define CABILITY_H

class cAbility
{
	public:
		//Constructor for creating the ability
		cAbility(int type = 0);
		
		//Polymorphic Function for the use ability function
		//which performs the ability power when activated
		virtual void UseAbility() { }

		//Accessor
		int		getType() { return m_type; }
		bool	IsActive() { return m_bIsActive; }

		//Mutator
		void	setType(int type) { m_type = type; }
		void	changeActive(bool bIsActive) { m_bIsActive = bIsActive; }

	private:
		//Represents the type of ability
		int		m_type;

		//Checks to see if this ability is activated
		bool	m_bIsActive;
};

class cArcaneBolt : public cAbility
{
	public:
		cArcaneBolt();
		~cArcaneBolt();

		//Provides functionality for using an ability
		void UseAbility();
};

//Ignis means Fire
class cIgnis : public cAbility
{
	public: 
		cIgnis();
		~cIgnis();

		void UseAbility();
};

//Fugae means Flight
class cFugae : public cAbility
{
	public:
		cFugae();
		~cFugae();

		void UseAbility();
};

//Vocate means Summoning
class cVocate : public cAbility
{
	public:
		cVocate();
		~cVocate();

		void UseAbility();
};
#endif